Option Explicit

'################################################################
' Descriptor
' 子查询单列列结构 的 字段信息
'################################################################

Implements ISqlTranslateNameInfo
Implements ISqlTranslateColInfo

'################################################################
' Field
'################################################################
' 当前子查询可用的作用域
' 这个作用域只限于此，没有父级作用域
Private selectTableEnv As ISqlTranslateEnv

' 当前列的别名
Private colAliasNameToken As SqlToken

'################################################################
' Init
'################################################################
' 初始化
Public Sub Init(ByRef env As ISqlTranslateEnv)
    If env Is Nothing Then
        Err.Raise 10001, Description:="parameter env must be not nothing"
        Exit Sub
    End If

    Set selectTableEnv = env
End Sub

'################################################################
' Function
'################################################################
' 为当前列内部的子查询设置父级作用域
Public Sub setParentEnv(ByRef env As ISqlTranslateEnv)
    If Not selectTableEnv Is Nothing Then
        selectTableEnv.setParentEnv env
    End If
End Sub

' 尝试将各子作用域中 + 子查询作用域中的真实表替换成 with 表作用域
Public Sub transFormRealTableToWithTable()
    selectTableEnv.transFormRealTableToWithTable
End Sub

'################################################################
' Implements ISqlTranslateColInfo Function
'################################################################
' 获取使用到的原始列名
Public Function ISQLTranslateColInfo_getOriginColName() As String
    ISQLTranslateColInfo_getOriginColName = ""
End Function

' 设置变换后的列名
Public Sub ISQLTranslateColInfo_setTranslatedColName(ByRef n As String)
    ' noop
End Sub

' 读取后的列名
Public Function ISQLTranslateColInfo_getTranslatedColName() As String
    ISQLTranslateColInfo_getTranslatedColName = ""
End Function

' 获取使用到的原始表名
Public Function ISQLTranslateColInfo_getTableName() As String
    ISQLTranslateColInfo_getTableName = ""
End Function

' 设置所在的表的别名
Public Sub ISQLTranslateColInfo_setTableAliasName(ByRef n As String)
    ' noop
End Sub

' 获取所在的表的别名
Public Function ISQLTranslateColInfo_getTableAliasName() As String
    ISQLTranslateColInfo_getTableAliasName = ""
End Function

' 设置当前列的别名
Public Sub ISQLTranslateColInfo_setAliasNameToken(ByRef token As SqlToken)
    Set colAliasNameToken = token
End Sub

' 获取当前列的别名
Public Function ISQLTranslateColInfo_getAliasName() As String
    If colAliasNameToken Is Nothing Then
        ISQLTranslateColInfo_getAliasName = ""
    Else
        ISQLTranslateColInfo_getAliasName = colAliasNameToken.value
    End If
End Function

' 执行表名 + 列名的替换
' @param startEnv 搜索表名的起始作用域(当前列所在的 env)
' @param translateType 转换的类型(逻辑->物理=0, 物理->逻辑=1)
Public Sub ISQLTranslateColInfo_translate(ByRef startEnv As ISqlTranslateEnv, ByRef em As ISqlEntityManager, ByVal translateType As Integer)
    selectTableEnv.translate em, translateType
End Sub

'################################################################
' Implements ISqlTranslateNameInfo Function
'################################################################

' 获取转换后名称
Public Function ISqlTranslateNameInfo_getTranslatedName() As String
    'return ""
End Function

' 获取别名
Public Function ISqlTranslateNameInfo_getAliasName() As String
    ISqlTranslateNameInfo_getAliasName = ISQLTranslateColInfo_getAliasName
End Function

' 获取非要求类型的名称
Public Function ISqlTranslateNameInfo_getReverseTypeName() As String
    'return ""
End Function